#include<iostream>
#include<string>
#include<vector>
using namespace std;
int n,m;
vector<int>p;
vector<int>s;
int find(int x){
    if(x!=p[x])
        p[x]=find(p[x]);
    return p[x];
}
int main(){
    cin>>n>>m;
    p.resize(n+1),s.resize(n+1);
    for(int i=0;i<=n;i++){
        p[i]=i;
        s[i]=1;
    }
    while(m--){
        string method;
        int a,b;
        cin>>method;
        if(method=="C"){
            cin>>a>>b;
            int pa=find(a),pb=find(b);
            //如果已经在一个集合了
            if(pa==pb)continue;
            p[pa]=pb;
            //只需要维护根节点的s
            s[pb]+=s[pa];
            
        }
        else if(method=="Q1"){
            cin>>a>>b;
            cout<<(find(a)==find(b)?"Yes":"No")<<endl;
        }
        else{
            cin>>a;
            cout<<s[find(a)]<<endl;
        }
    }
    return 0;
}